﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Configuration;

namespace ivvExportacao
{
    public class empreendimentos
    {
        public double quantidadeResgistrosPegarResid_d()
        {
            SqlConnection conexaoAntigaQTD = new SqlConnection(ConfigurationManager.AppSettings["baseDadosAntiga"]);
            conexaoAntigaQTD.Open();
            SqlConnection conexaoNovaQTD = new SqlConnection(ConfigurationManager.AppSettings["baseDadosNova"]);
            conexaoNovaQTD.Open();

            double quantNova = 0, quantAntiga = 0;

            string selectQuantAntiga = "select count(*) as quant from resid_d";

            SqlCommand cmdAntiga = new SqlCommand(selectQuantAntiga, conexaoAntigaQTD);
            SqlDataReader drAntiga = cmdAntiga.ExecuteReader();

            if (drAntiga.HasRows)
            {
                drAntiga.Read();
                quantAntiga = Convert.ToDouble(drAntiga["quant"].ToString());
            }
            drAntiga.Close();

            string selectQuantNova = "select count(*) as quant from empreendimento where exportacao = 1";
            SqlCommand cmdNova = new SqlCommand(selectQuantNova, conexaoNovaQTD);
            SqlDataReader drNova = cmdNova.ExecuteReader();

            if (drNova.HasRows)
            {
                drNova.Read();
                quantNova = Convert.ToDouble(drNova["quant"].ToString());
            }

            conexaoAntigaQTD.Close();
            conexaoNovaQTD.Close();

            return quantAntiga - quantNova;
        }

        public string transfeririEmpreendimentosResid_d()
        {
            try
            {
                SqlConnection conexaoAntiga = new SqlConnection(ConfigurationManager.AppSettings["baseDadosAntiga"]);
                conexaoAntiga.Open();
                SqlConnection conexaoNova = new SqlConnection(ConfigurationManager.AppSettings["baseDadosNova"]);
                conexaoNova.Open();
                SqlConnection conexaoNovaInsert = new SqlConnection(ConfigurationManager.AppSettings["baseDadosNova"]);
                conexaoNovaInsert.Open();
                SqlConnection conexaoNovaValidar = new SqlConnection(ConfigurationManager.AppSettings["baseDadosNova"]);
                conexaoNovaValidar.Open();

                int qtdResgistrosPegarResid_d = (int)quantidadeResgistrosPegarResid_d();

                string selectAntiga = "select top " + quantidadeResgistrosPegarResid_d() + " (select razao from empresa where empresa.codigo = resid_d.cod_empresa) as empresa, ";
                selectAntiga += "(select descricao from origem_de_recursos where origem_de_recursos.codigo = resid_d.cod_orig_rec) as origem_de_recursos, ";
                selectAntiga += "(select nome from bairros where bairros.codigo = resid_d.cod_bairro) as bairros, resid_d.* from resid_d order by ANO_MES desc";

                SqlCommand cmdAntiga = new SqlCommand(selectAntiga, conexaoAntiga);
                SqlDataReader drAntiga = cmdAntiga.ExecuteReader();

                int passou = 0, naopassou = 0;

                if (drAntiga.HasRows)
                {
                    while (drAntiga.Read())
                    {
                        //SELECT PARA RECUPERAR O CÓDIGO DA INCORPORADORA E DO BAIRRO COM BASE NO NOME QUE É A ÚNICA CHAVE
                        //QUE PODE SER COMPARADA

                        //OBS: ESSE SELECT TRAZ APENAS UMA LINHA COM DADOS CONTENDO DOIS CAMPOS CODIGOINCORPORADORA E CODIGOBAIRRO
                        string selectNova = "select top 1 (select codigoIncorporadora from incorporadora where incorporadora.razaoSocialIncorporadora = '" + drAntiga["empresa"].ToString() + "') as codigoIncorporadora, ";
                        selectNova += "(select codigoOrigemRecurso from origemRecurso where origemRecurso.descricaoOrigemRecurso = '" + drAntiga["origem_de_recursos"].ToString() + "') as codigoOrigemRecurso, ";
                        selectNova += "(select codigoBairro from bairro where bairro.descricaoBairro = '" + drAntiga["bairros"].ToString() + "') as codigoBairro from bairro";

                        SqlCommand cmdNova = new SqlCommand(selectNova, conexaoNova);
                        SqlDataReader drNova = cmdNova.ExecuteReader();

                        if (drNova.HasRows)
                        {
                            drNova.Read();

                            //CASO EXISTA UM EMPREENDIMENTO COM O BAIRRO E A ÁREA QUE SÃO CARACTERÍSTICAS QUE DIFERENCIÃO O MESMO, IGUAIS NÃO PERMITE O CADASTRO REPETIDO.
                            string selectValidar = "SELECT * FROM empreendimento where areaPrivada = '" + drAntiga["area"].ToString() + "' ";
                            selectValidar += "and codigoIncorporadora = " + drNova["codigoIncorporadora"].ToString() + " and codigoBairro = " + drNova["codigoBairro"].ToString();

                            SqlCommand cmdValidar = new SqlCommand(selectValidar, conexaoNovaValidar);
                            SqlDataReader drValidar = cmdValidar.ExecuteReader();

                            if (!drValidar.HasRows)
                            {
                                string insertEmpreendimento = "INSERT INTO empreendimento (codigoIncorporadora, codigoBairro, tipoTransporte, exportacao, areaPrivada, ";
                                insertEmpreendimento += "numeroElevadores, numeroQuartos, numeroGaragens, tempoFinanciamento, codigoOrigemRecurso) ";

                                insertEmpreendimento += "VALUES (" + drNova["codigoIncorporadora"].ToString() + ", " + drNova["codigoBairro"].ToString() + ", 1, 1, ";
                                insertEmpreendimento += "'" + drAntiga["area"].ToString() + "', '" + drAntiga["qtd_elevadores"].ToString() + "', '" + drAntiga["qta_quartos"].ToString() + "',  ";
                                insertEmpreendimento += "'" + drAntiga["qtd_vagas_garagem"].ToString() + "', '" + drAntiga["temp_financ"].ToString() + "', " + drNova["codigoOrigemRecurso"].ToString() + ") ";

                                SqlCommand cmdInsertEmpreendimento = new SqlCommand(insertEmpreendimento, conexaoNovaInsert);
                                cmdInsertEmpreendimento.ExecuteNonQuery();

                                passou++;
                            }
                            else
                            {
                                naopassou++;
                            }

                            drValidar.Close();
                        }

                        drNova.Close();
                    }
                }

                drAntiga.Close();

                conexaoAntiga.Close();
                conexaoNova.Close();
                conexaoNovaInsert.Close();
                conexaoNovaValidar.Close();

                return "<span style=\"color:Green\">" + qtdResgistrosPegarResid_d + " registros dos empreendimentos residenciais transferidos com sucesso. Transferidos: " + passou + "  -  Já vinculados: " + naopassou + "</span>";
            }
            catch
            {
                return "<span style=\"color:Red\">Falha ao transferir os dados dos empreendimentos residenciais.</span>";
            }
        }

        public double quantidadeResgistrosPegarComerc_d()
        {
            SqlConnection conexaoAntigaQTD = new SqlConnection(ConfigurationManager.AppSettings["baseDadosAntiga"]);
            conexaoAntigaQTD.Open();
            SqlConnection conexaoNovaQTD = new SqlConnection(ConfigurationManager.AppSettings["baseDadosNova"]);
            conexaoNovaQTD.Open();

            double quantNova = 0, quantAntiga = 0;

            string selectQuantAntiga = "select count(*) as quant from Comerc_d";

            SqlCommand cmdAntiga = new SqlCommand(selectQuantAntiga, conexaoAntigaQTD);
            SqlDataReader drAntiga = cmdAntiga.ExecuteReader();

            if (drAntiga.HasRows)
            {
                drAntiga.Read();
                quantAntiga = Convert.ToDouble(drAntiga["quant"].ToString());
            }
            drAntiga.Close();

            string selectQuantNova = "select count(*) as quant from empreendimento where exportacao = 0";
            SqlCommand cmdNova = new SqlCommand(selectQuantNova, conexaoNovaQTD);
            SqlDataReader drNova = cmdNova.ExecuteReader();

            if (drNova.HasRows)
            {
                drNova.Read();
                quantNova = Convert.ToDouble(drNova["quant"].ToString());
            }

            conexaoAntigaQTD.Close();
            conexaoNovaQTD.Close();

            return quantAntiga - quantNova;
        }

        public string transfeririEmpreendimentosComerc_d()
        {
            try
            {
                SqlConnection conexaoAntiga = new SqlConnection(ConfigurationManager.AppSettings["baseDadosAntiga"]);
                conexaoAntiga.Open();
                SqlConnection conexaoNova = new SqlConnection(ConfigurationManager.AppSettings["baseDadosNova"]);
                conexaoNova.Open();
                SqlConnection conexaoNovaInsert = new SqlConnection(ConfigurationManager.AppSettings["baseDadosNova"]);
                conexaoNovaInsert.Open();
                SqlConnection conexaoNovaValidar = new SqlConnection(ConfigurationManager.AppSettings["baseDadosNova"]);
                conexaoNovaValidar.Open();

                int qtdResgistrosPegarComerc_d = (int)quantidadeResgistrosPegarComerc_d();

                string selectAntiga = "select top " + quantidadeResgistrosPegarComerc_d() + " (select razao from empresa where empresa.codigo = Comerc_d.cod_empresa) as empresa, ";
                selectAntiga += "(select nome from bairros where bairros.codigo = Comerc_d.cod_bairro) as bairros, Comerc_d.* from Comerc_d order by ANO_MES desc";

                SqlCommand cmdAntiga = new SqlCommand(selectAntiga, conexaoAntiga);
                SqlDataReader drAntiga = cmdAntiga.ExecuteReader();

                int passou = 0, naopassou = 0;

                if (drAntiga.HasRows)
                {
                    while (drAntiga.Read())
                    {
                        //SELECT PARA RECUPERAR O CÓDIGO DA INCORPORADORA E DO BAIRRO COM BASE NO NOME QUE É A ÚNICA CHAVE
                        //QUE PODE SER COMPARADA

                        //OBS: ESSE SELECT TRAZ APENAS UMA LINHA COM DADOS CONTENDO DOIS CAMPOS CODIGOINCORPORADORA E CODIGOBAIRRO
                        string selectNova = "select top 1 (select codigoIncorporadora from incorporadora where incorporadora.razaoSocialIncorporadora = '" + drAntiga["empresa"].ToString() + "') as codigoIncorporadora, ";
                        selectNova += "(select codigoBairro from bairro where bairro.descricaoBairro = '" + drAntiga["bairros"].ToString() + "') as codigoBairro from bairro";

                        SqlCommand cmdNova = new SqlCommand(selectNova, conexaoNova);
                        SqlDataReader drNova = cmdNova.ExecuteReader();

                        if (drNova.HasRows)
                        {
                            drNova.Read();

                            //CASO EXISTA UM EMPREENDIMENTO COM O BAIRRO E A ÁREA QUE SÃO CARACTERÍSTICAS QUE DIFERENCIÃO O MESMO, IGUAIS NÃO PERMITE O CADASTRO REPETIDO.
                            string selectValidar = "SELECT * FROM empreendimento where areaPrivada = '" + drAntiga["area"].ToString() + "' ";
                            selectValidar += "and codigoIncorporadora = " + drNova["codigoIncorporadora"].ToString() + " and codigoBairro = " + drNova["codigoBairro"].ToString();

                            SqlCommand cmdValidar = new SqlCommand(selectValidar, conexaoNovaValidar);
                            SqlDataReader drValidar = cmdValidar.ExecuteReader();

                            if (!drValidar.HasRows)
                            {
                                string insertEmpreendimento = "INSERT INTO empreendimento (codigoIncorporadora, codigoBairro, tipoTransporte, exportacao, areaPrivada, codigoOrigemRecurso) ";
                                insertEmpreendimento += "VALUES (" + drNova["codigoIncorporadora"].ToString() + ", " + drNova["codigoBairro"].ToString() + ", 0, 0, '" + drAntiga["area"].ToString() + "', 13) ";

                                SqlCommand cmdInsertEmpreendimento = new SqlCommand(insertEmpreendimento, conexaoNovaInsert);
                                cmdInsertEmpreendimento.ExecuteNonQuery();

                                passou++;
                            }
                            else
                            {
                                naopassou++;
                            }

                            drValidar.Close();
                        }

                        drNova.Close();
                    }
                }

                drAntiga.Close();

                conexaoAntiga.Close();
                conexaoNova.Close();
                conexaoNovaInsert.Close();
                conexaoNovaValidar.Close();

                return "<span style=\"color:Green\">" + qtdResgistrosPegarComerc_d + " registros dos empreendimentos comerciais transferidos com sucesso. Transferidos: " + passou + "  -  Já vinculados: " + naopassou + "</span>";
            }
            catch
            {
                return "<span style=\"color:Red\">Falha ao transferir os dados dos empreendimentos comerciais.</span>";
            }
        }
    }
}
